package leetcode;

import java.util.ArrayList;

/**
 * @Project : AlgorithmLearning
 * @Package : Leetcode
 * @File : Q0150.java
 * @Author : WangRuoyu
 * @Date 2023/11/9 17:38
 */


public class Q0150 {
//    public int evalRPN(String[] tokens) {
//        ArrayList<String> stack = new ArrayList<>();
//        for (String token : tokens) {
//            switch (token) {
//                case "+" -> {
//                    int a = Integer.parseInt(stack.remove(stack.size() - 1));
//                    int b = Integer.parseInt(stack.remove(stack.size() - 1));
//                    stack.add(String.valueOf(b + a));
//                }
//                case "-" -> {
//                    int a = Integer.parseInt(stack.remove(stack.size() - 1));
//                    int b = Integer.parseInt(stack.remove(stack.size() - 1));
//                    stack.add(String.valueOf(b - a));
//                }
//                case "*" -> {
//                    int a = Integer.parseInt(stack.remove(stack.size() - 1));
//                    int b = Integer.parseInt(stack.remove(stack.size() - 1));
//                    stack.add(String.valueOf(b * a));
//                }
//                case "/" -> {
//                    int a = Integer.parseInt(stack.remove(stack.size() - 1));
//                    int b = Integer.parseInt(stack.remove(stack.size() - 1));
//                    stack.add(String.valueOf(b / a));
//                }
//                default -> stack.add(token);
//            }
//        }
//        return Integer.parseInt(stack.get(0));
//    }

    public int evalRPN(String[] tokens) {
        int[] nums = new int[(int) 1e4 + 10];
        int n = 0;

        for (String token : tokens) {
            if (token.equals("+")) {
                nums[n - 2] += nums[n - 1];
                n--;
            } else if (token.equals("-")) {
                nums[n - 2] -= nums[n - 1];
                n--;
            } else if (token.equals("*")) {
                nums[n - 2] *= nums[n - 1];
                n--;
            } else if (token.equals("/")) {
                nums[n - 2] /= nums[n - 1];
                n--;
            } else {
                nums[n++] = Integer.parseInt(token);
            }
        }

        return nums[0];
    }

    public static void main(String[] args) {
        Q0150 sl = new Q0150();
        String[] tokens = {"10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"};
        System.out.println(sl.evalRPN(tokens));
    }
}